package projeto.lp2.grupo6.testes;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import projeto.lp2.grupo6.logica.Estabelecimento;
import projeto.lp2.grupo6.logica.TipoDeAlmocoServido;

/**
 * Aluno: 
 *      Guilherme Monteiro 
 * 	Italo Guedes 
 * 	Tiago Leite
 * 
 * @author guilhermemg
 * @author tiagoln
 * @author italogas
 */

public class EstabelecimentoTest {
	Estabelecimento e1;
	Estabelecimento e2;
	
	@Before
	public void setup() {
		try {
			String nome1 = "nome1";
			String nome2 = "nome2";
			String ende1 = "rua um";
			String ende2 = "rua dois";
			TipoDeAlmocoServido tipoAlmoco1 = TipoDeAlmocoServido.A_LA_CARTE;
			TipoDeAlmocoServido tipoAlmoco2 = TipoDeAlmocoServido.PRATO_FEITO;
			
			e1 = new Estabelecimento(nome1, ende1, tipoAlmoco1);
			e2 = new Estabelecimento(nome2, ende2, tipoAlmoco2);
		}
		catch(Exception e) {
			Assert.fail("Nao esperava erro em objetos criados corretamente");
		}
	}

	@Test
	public void testGetNome() {
		try {
			Assert.assertEquals(e1.getNome(), "nome1");
			Assert.assertEquals(e2.getNome(), "nome2");
		}
		catch(Exception e) {
			Assert.fail("Nao esperava erro em getNome");
		}
	}

	@Test
	public void testSetNome1() {
		try {
			e1.setNome(null);
		}
		catch(Exception e) {
			Assert.assertEquals(e.getMessage(), "Erro em nome nulo");
		}
	}
	
	@Test
	public void testSetNome2() {
		try {
			e2.setNome("");
		}
		catch(Exception e) {
			Assert.assertEquals(e.getMessage(), "Erro em nome vazio");
		}
	}
	
	@Test
	public void testGetEndereco() {
		try {
			Assert.assertTrue(e1.getEndereco().equals("rua um"));
			Assert.assertTrue(e2.getEndereco().equals("rua dois"));
		}
		catch(Exception e) {
			Assert.fail("Nao esperava erro em getEndereco");
		}
	}

	@Test
	public void testSetEndereco() {
		try {
			e1.setEndereco(null);
		}
		catch(Exception e) {
			Assert.assertEquals(e.getMessage(), "Erro em endereco nulo");
		}
	}

	@Test
	public void testGetTipoDeAlmoco() {
		try {
			Assert.assertEquals(e1.getTipoDeAlmoco(), TipoDeAlmocoServido.A_LA_CARTE);
			Assert.assertEquals(e2.getTipoDeAlmoco(), TipoDeAlmocoServido.PRATO_FEITO);
		}
		catch(Exception e) {
			Assert.fail("Erro em getTipoDeAlmoco");
		}
	}

	@Test
	public void testSetTipoDeAlmoco() {
		try {
			e1.setTipoDeAlmoco(null);
			Assert.fail("Devia lancar excecao em tipo de almoco nulo");
		}
		catch(Exception e) {
			Assert.assertEquals(e.getMessage(), "Erro em tipo de almoco nulo");
		}
		try {
			e1.setTipoDeAlmoco(TipoDeAlmocoServido.SELF_SERVICE);
			Assert.assertEquals(e1.getTipoDeAlmoco(), TipoDeAlmocoServido.SELF_SERVICE);
		}
		catch(Exception e) {
			Assert.fail("Erro em tipo de almoco");
		}
	}

}
